﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace QuanLyGaRaOTo.VatTu
{
    public partial class Presentation : Form
    {
        private DataTable dtVatTu = new DataTable();

        public Presentation()
        {
            InitializeComponent();
        }

        private void loadVatTu()
        {
            BUS bus = new BUS();
            dtVatTu = new DataTable();
            dtVatTu = bus.read();
            dgv.DataSource = dtVatTu.DefaultView;
        }

        private void Presentation_Load(object sender, EventArgs e)
        {
            loadVatTu();
        }

        private void cbChonTatCa_CheckedChanged(object sender, EventArgs e)
        {
            cbTenVatTu.Checked = cbChonTatCa.Checked;
            cbSoLuongTonTu.Checked = cbChonTatCa.Checked;
            cbSoLuongTonDen.Checked = cbChonTatCa.Checked;
            cbDonGiaTu.Checked = cbChonTatCa.Checked;
            cbDonGiaDen.Checked = cbChonTatCa.Checked;
        }

        private void cbTenVatTu_CheckedChanged(object sender, EventArgs e)
        {
            txtTenVatTu.Enabled = cbTenVatTu.Checked;
        }

        private void cbSoLuongTonTu_CheckedChanged(object sender, EventArgs e)
        {
            txtSoLuongTonTu.Enabled = cbSoLuongTonTu.Checked;
        }

        private void cbSoLuongTonDen_CheckedChanged(object sender, EventArgs e)
        {
            txtSoLuongTonDen.Enabled = cbSoLuongTonDen.Checked;
        }

        private void cbDonGiaTu_CheckedChanged(object sender, EventArgs e)
        {
            txtDonGiaTu.Enabled = cbDonGiaTu.Checked;
        }

        private void cbDonGiaDen_CheckedChanged(object sender, EventArgs e)
        {
            txtDonGiaDen.Enabled = cbDonGiaDen.Checked;
        }

        private void btnTim_Click(object sender, EventArgs e)
        {            
            string filter = "";
            CheckValues cv = new CheckValues();

            if (cbTenVatTu.Checked)           
                filter = string.Format("TENVATTU like '%{0}%'", txtTenVatTu.Text);

            if (cbSoLuongTonTu.Checked)
            {
                if (!cv.checkUint(txtSoLuongTonTu.Text))
                {
                    MessageBox.Show("'Số lượng tồn từ' phải là số nguyên dương!!!", "Thêm", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    txtSoLuongTonTu.Focus();
                    txtSoLuongTonDen.SelectAll();
                    return;
                }

                if (filter != "")
                    filter += "and ";

                filter += string.Format("SOLUONGTON >= {0}", txtSoLuongTonTu.Text);
            }

            if (cbSoLuongTonDen.Checked)
            {
                if (!cv.checkUint(txtSoLuongTonDen.Text))
                {
                    MessageBox.Show("'Số lượng tồn đến' phải là số nguyên dương!!!", "Thêm", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    txtSoLuongTonDen.Focus();
                    txtSoLuongTonDen.SelectAll();
                    return;
                }

                if (filter != "")
                    filter += "and ";

                filter += string.Format("SOLUONGTON <= {0}", txtSoLuongTonDen.Text);
            }

            if (cbDonGiaTu.Checked)
            {
                if (!cv.checkUint(txtDonGiaTu.Text))
                {
                    MessageBox.Show("'Đơn giá từ' phải là số nguyên dương!!!", "Thêm", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    txtDonGiaTu.Focus();
                    txtDonGiaTu.SelectAll();
                    return;
                }

                if (filter != "")
                    filter += "and ";

                filter += string.Format("DONGIA >= {0}", txtDonGiaTu.Text);
            }

            if (cbDonGiaDen.Checked)
            {
                if (!cv.checkUint(txtDonGiaDen.Text))
                {
                    MessageBox.Show("'Đơn giá đến' phải là số nguyên dương!!!", "Thêm", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    txtDonGiaDen.Focus();
                    txtDonGiaDen.SelectAll();
                    return;
                }

                if (filter != "")
                    filter += "and ";

                filter += string.Format("DONGIA <= {0}", txtDonGiaDen.Text);
            }            

            DataView dv = new DataView(dtVatTu);
            dv.RowFilter = filter;
            dgv.DataSource = dv;
        }

        private void tsbEdit_Click(object sender, EventArgs e)
        {
            btnStatus(false);
        }

        private void insert(DataRow row)
        {
            DTO dto = new DTO();

            dto.TenVatTu = row["TenVatTu"].ToString();

            if (row["SoLuongTon"].ToString() != "")
                dto.SoLuongTon = Convert.ToInt32(row["SoLuongTon"]);

            if (row["DonGia"].ToString() != "")
                dto.DonGia = Convert.ToInt32(row["DonGia"]);          

            BUS bus = new BUS();
            int i = bus.insert(dto);

            if (i == -1)
            {
                MessageBox.Show("Đã xảy ra lỗi trong quá trình thêm dòng dữ liệu mới!!!", "Thêm", MessageBoxButtons.OK, MessageBoxIcon.Error);
                dtVatTu.RejectChanges();
                btnStatus(true);
            }
            else
                row["MaVatTu"] = i;
        }

        private void delete(DataRow row)
        {
            DTO dto = new DTO();

            dto.MaVatTu = Convert.ToInt32(row["MaVatTu", DataRowVersion.Original]);

            BUS bus = new BUS();
            if (!bus.delete(dto))
            {
                MessageBox.Show("Đã xảy ra lỗi trong quá trình xóa dòng dữ liệu mới!!!", "Xóa", MessageBoxButtons.OK, MessageBoxIcon.Error);
                dtVatTu.RejectChanges();
                btnStatus(true);
            }
        }

        private void update(DataRow row)
        {
            DTO dto = new DTO();

            dto.MaVatTu = Convert.ToInt32(row["MaVatTu"]);
            dto.TenVatTu = row["TenVatTu"].ToString();

            if (row["SoLuongTon"].ToString() != "")
                dto.SoLuongTon = Convert.ToInt32(row["SoLuongTon"]);

            if (row["DonGia"].ToString() != "")
                dto.DonGia = Convert.ToInt32(row["DonGia"]);            

            BUS bus = new BUS();
            if (!bus.update(dto))
            {
                MessageBox.Show("Đã xảy ra lỗi trong quá trình cập nhật dòng dữ liệu mới!!!", "Cập nhật", MessageBoxButtons.OK, MessageBoxIcon.Error);
                dtVatTu.RejectChanges();
                btnStatus(true);
            }
        }

        private void tsbSave_Click(object sender, EventArgs e)
        {
            foreach (DataRow row in dtVatTu.Rows)
                switch (row.RowState)
                {
                    case DataRowState.Added:
                        insert(row);
                        break;

                    case DataRowState.Modified:
                        update(row);
                        break;

                    case DataRowState.Deleted:
                        delete(row); ;
                        break;

                    default: break;
                }

            dtVatTu.AcceptChanges();
            btnStatus(true);
        }

        private void tsbCancel_Click(object sender, EventArgs e)
        {
            dtVatTu.RejectChanges();
            btnStatus(true);
        }

        private void tsbExit_Click(object sender, EventArgs e)
        {
            this.Close();
        }        

        private void txtSoLuongTonTu_TextChanged(object sender, EventArgs e)
        {           
            editTextBoxX(txtSoLuongTonTu);
        }

        private void txtSoLuongTonDen_TextChanged(object sender, EventArgs e)
        {
            editTextBoxX(txtSoLuongTonDen);
        }
        
        private void txtDonGiaTu_TextChanged(object sender, EventArgs e)
        {           
            editTextBoxX(txtDonGiaTu);  
        }

        private void txtDonGiaDen_TextChanged(object sender, EventArgs e)
        {            
            editTextBoxX(txtDonGiaDen);            
        }

        private void editTextBoxX(DevComponents.DotNetBar.Controls.TextBoxX txt)
        {
            CheckValues cv = new CheckValues();

            if (txt.Text != "" && !cv.checkUint(txt.Text))
            {
                MessageBox.Show(txt.Name + " phải là số nguyên dương!!!", "Tra cứu", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txt.SelectAll();
            }
        }

        private void btnStatus(Boolean status)
        {
            try
            {
                grTraCuu.Enabled = status;
                dgv.ReadOnly = status;
                dgv.AllowUserToDeleteRows = !status;

                tsbEdit.Enabled = tsbReset.Enabled = status;
                tsbSave.Enabled = tsbCancel.Enabled = !status;
                dgv.AllowUserToAddRows = !status;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }

        private void tsbReset_Click(object sender, EventArgs e)
        {
            dgv.DataSource = dtVatTu.DefaultView;
        }
    }
}
